SViewBase for iOS 提供三维模型基本的浏览、模型属性操作、基本三维对象操作、动画播放、测量、批注等功能的实现接口,可实现基本的 三维模型展示功能,以便于用户个性化定制属于自己的产品。
集成之前需要熟悉集成环境、SViewBase for iOS的文件描述以及Xcode的工程配置,以便快速准确的集成相关功能界面。详细集成准备如下所示:
集成环境
SViewBase for iOS 开发库集成需要的环境:
  • 开发环境:Xcode 7.0以上版本
  • 系统环境: macOS 10.11以上版本
  • 运行环境: iOS 9.0以上,仅支持真机运行
文件描述
SViewBase控件包包括:SViewBase.framework、SViewBase.bundle
  • SViewBase.framework:功能接口集成库。
  • SViewBase.bundle:资源包。
解压SViewBase控件包,得到SViewBase.framework和SViewBase.bundle两个文件,如下图所示:
Xcode配置
Xcode配置过程如下:
  • Xcode工程右侧相应目录下单击右键选择【Add Files to "工程名"】,选择iOSSViewBase,点击确定(或者直接拖拽控件包到工程相应目录下),成功添加后如下图所示:
  • Xcode工程配置中选择【Build Phases】,在【Link Binary With Libraries】中添加如下系统库:
    AVFoundation.framework
    CoreGraphics.framework
    QuartzCore.framework
    OpenGLES.framework
    Foundation.framework
    UIKit.framework
    libicucore.tbd
    libiconv.tbd
    libz.tbd
    成功配置后如下图所示:
  • Xcode工程配置中选择【Build Setting】,进行如下两项配置:
    • 【Enable Bitcode】配置为NO
    • 【Compile Sources As】添加配置Objective C++
    成功配置后如下图所示:
集成SViewBase控件的过程中需要熟悉控件的文件内容和使用方法,下面我们做出了详细的引用说明和配置管理、控件对象初始化方法等相关说明。详细集成步骤请看如下描述 :
引用声明
使用控件,首先需要声明头文件
#import <SViewBase/SViewBase.h>
配置管理
控件对象初始化之前,需要对本地化资源路径、OpenGLES版本和License授权等信息进行初始配置 (此过程建议在程序启动后进行配置)
  • 申请授权文件sview.lic,并放在bundle中data文件夹下。(名称和位置要与规定一致)申请地址
  • OpenGLES版本号配置(默认为2.0)
  • [SParameters setGLESVersion:2.0];
  • 资源路径配置
  • NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    [SParameters setAppWorkPath:path];
注意事项:
  • gles版本设置后重新启动后有效,初次设置在对象初始化之前有效;
  • 路径下的文件具有读写的权限;
控件对象初始化
初始化对象,使用方法(指定视图大小):
- (id)initWithFrame:(CGRect)frame;
代码示例如下
// 初始化SViewBase对象
SViewBase *sviewBase = [[SViewBase alloc]initWithFrame:self.view.frame];
初始化完成后可根据需要添加到View视图中
需要用到多个SViewBase时,只需要重复创建添加多次即可。
注意事项:
  • 程序正常运行时,设置GLView开始界面刷新:
  • [sviewBase setGLViewRefresh:YES];
  • 程序退出或者进入后台运行时,停止GLView的定时刷新:
    [[sviewBase setGLViewRefresh:NO];
    以保证程序不会异常退出。
  • 由于渲染器占用初始化耗时较多,建议使用懒加载方式或者单例模式初始化(保证渲染器只初始化一次)
对象销毁
当对象需要销毁对象时:
//如果有已经打开的文件,关闭文件
[sviewBase close];

//将SViewBase从父视图上移除
[sviewBase removeFromSuperview];

//将SViewBase置为空,并将代理置为空
sviewBase.sviewBaseDelegate = nil;
sviewBase = nil;
调用控件方法
以SViewBase for iOS API接口文档中打开本地文件接API接口文档中打开本地文件为例
- (BOOL) open:(NSString*)filePath asyn:(BOOL)asyn percent:(FileReadPercentBlock)percentBlock finish:(FinishOpenBlock)finishBlcok;
[sviewBase open:filePath asyn:YES percent:^(CGFloat percent) {
    
                                } finish:^(SVL_STATUS status) {
                                
                                }];
sviewBase为控件对象 open为控件提供的接口方法 filePath为打开模型文件路径 asyn是否为异步加载模型 percent加载进度回调 finish加载完成的回调
常见问题
  • 在sviewBase没有释放的情况下,App退出后台导致崩溃:
    • 由于openGL不能后台刷新,所以在程序进入后台之前,需要将sviewBase对象的刷新暂停,代码如下:
    • - (void)applicationWillResignActive:(UIApplication *)application {
            //设置SViewBase开始刷新
           [sviewBase setGLViewRefresh:NO];
      }
      同时,在程序重新进入前台时,需要设置sviewBase继续刷新,代码如下:
      - (void)applicationDidBecomeActive:(UIApplication *)application {
           //设置SViewBase开始刷新
           [sviewBase setGLViewRefresh:YES];
      }
  • SViewBase.framework文件中引用了JSONKit类,如果工程中也许使用JSONKit类,只保留头文件即可,把JSONKit.m删除;如果和其他类库出现JSONKit的调用冲突;出现类似这样的错误:
    duplicate symbol _OBJC_METACLASS_$_JKSerializer in:
        /Users/tony/Desktop/XXXProject/iOSSViewBase/SViewBase.framework(JSONKit.o)
        /Users/tony/Library/Developer/Xcode/DerivedData/XXXProject-boqkajmzatzxohbyrrhklfiuknic/Build/Products/Debug-iphoneos/libPods.a(JSONKit.o)
    ld: 24 duplicate symbols for architecture armv7
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    如果出现类似错误,解决方法如下:
    • 首先按照上述错误中提到的路径找到库文件:/Users/tony/Desktop/XXXProject/iOSSViewBase/SViewBase.framework,将它拷贝一份出来做进一步处理
    • 打开终端,并cd到文件夹下,使用lipo -info SViewBase.framework/SViewBase查看该文件下的架构信息, 留待后用
    • 使用命令lipo SViewBase.framework/SViewBase -thin armv7 -output SViewBase.framework/SViewBase.armv7 、lipo SViewBase.framework/SViewBase -thin arm64 -output SViewBase.framework/SViewBase.arm64,分离出其它的文件
    • 查看文件列表:ar -t SViewBase.framework/SViewbase.arm64、ar -t SViewBase.framework/SViewbase.armv7
    • 使用命令组合文件:lipo –create SViewBase.framework/SViewbase.arm64 SViewBase.framework/SViewbase.armv7 -output SViewBase.framework/SViewbase删除SViewbase.arm64、SViewbase.armv7文件
    • 将修改好的文件, 拖拽到原文件夹下,替换原文件即可